/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：太平金科-基础组件封装层-登录通-缺省实现
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taipingframework.boot.dlt.webapi.handler;

import com.taiping.dlt.converter.AuthLoginBOConverter;
import com.taiping.dlt.pojo.bo.AuthLoginBO;
import com.taiping.dlt.pojo.dto.AuthLoginDTO;
import com.taiping.dlt.pojo.query.AuthLoginQO;
import com.taiping.dlt.service.AccountService;
import com.taipingframework.boot.web.response.result.ApiResult;
import com.taipingframework.boot.web.response.status.ApiStatusEnum;
import com.taipingframework.utility.exception.ApplicationException;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;

@Component
@RequiredArgsConstructor
public class AccountHandler {

    private final AccountService accountService;

    /**
     * 禁用账户/(逻辑)删除账户
     */
    public Mono<ApiResult<Boolean>> disableAccount(AuthLoginQO loginQO) {
        AuthLoginBO loginBO = AuthLoginBOConverter.convert(loginQO);
        return accountService.disableAccount(loginBO)
                .zipWith(ApiResult.<Boolean>create(), (flag, result) ->
                        result.setStatus(ApiStatusEnum.SUCCESS)
                                .setResult(flag)
                )
                .onErrorResume(e -> Mono.error(new ApplicationException(e)));
    }

    /**
     * 搜集同步到当前业务系统的登陆数据
     */
    public Mono<ApiResult<Boolean>> collect(AuthLoginDTO authLoginDTO) {
        return accountService.receive(authLoginDTO.getAuthLoginBOList())
                .zipWith(ApiResult.<Boolean>create(),
                        (flag, result) -> result.setStatus(ApiStatusEnum.SUCCESS).setResult(flag))
                .onErrorResume(e -> Mono.error(new ApplicationException(e)));
    }

}
